package com.ccn.ui.a2screenadaptation;

import android.content.Context;
import android.util.DisplayMetrics;
import android.view.WindowManager;

/**
 * 第二章 屏幕适配
 * 第1节 云音乐大型项目屏幕适配解决方案
 * 2.1.1自定义像素适配
 * 布局适配
 * -避免写死控件尺寸 wrap_content，match_parent
 * -线性布局 weight
 * -相对布局 centerInParent
 * -约束布局
 * -Percent-support_lib widthPercent
 * <p>
 * 图片资源适配
 * -.9图或者SVG图
 * -备用位图匹配不同分辨率
 * <p>
 * 用户流程适配
 * 平板 手机使用两套布局
 * <p>
 * 限定符适配
 * -分辨率限定符 drawable-hdpi,xdpi
 * -尺寸限定符 layout-small,large
 * -最小宽度限定符 values-sw360dp,384dp
 * -屏幕方向限定符 layout-land,port
 * <p>
 * 刘海屏适配
 * 参考官方文档
 * <p>
 * 项目：屏幕适配-自定义View
 * 以一个特定宽度尺寸的设备为参考，在View的加载过程，
 * 根据当前设备的实际像素换算出目标像素，再作用在控件上
 * 详见：a2_1_1screen_adapter
 */
public class ScreenAdaptationUtils {

    private static ScreenAdaptationUtils utils;

    //设计稿参考宽高
    private static final float STANDARD_WIDTH = 720;
    private static final float STANDARD_HEIGHT = 1280;

    //屏幕显示宽高
    private int mDisplayWidth;
    private int mDisplayHeight;

    private ScreenAdaptationUtils(Context context) {
        //获取屏幕宽高
        if (mDisplayWidth == 0 ||
                mDisplayHeight == 0) {
            WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            if (manager != null) {
                DisplayMetrics metrics = new DisplayMetrics();
                manager.getDefaultDisplay().getMetrics(metrics);
                if (metrics.widthPixels > metrics.heightPixels) {
                    //横屏
                    mDisplayWidth = metrics.heightPixels;
                    mDisplayHeight = metrics.widthPixels;
                } else {
                    //竖屏
                    mDisplayWidth = metrics.widthPixels;
                    mDisplayHeight = metrics.heightPixels - getStatusBarHeight(context);
                }
            }
        }
    }

    /**
     * 获取状态栏高度
     *
     * @return 状态栏高度
     */
    public int getStatusBarHeight(Context context) {
        int resID = context.getResources()
                .getIdentifier("status_bar_height", "dimen", "android");
        if (resID > 0) {
            return context.getResources().getDimensionPixelSize(resID);
        }
        return 0;
    }

    public static ScreenAdaptationUtils getInstance(Context context) {
        if (utils == null) {
            utils = new ScreenAdaptationUtils(context.getApplicationContext());
        }
        return utils;
    }

    /**
     * 获取水平方向缩放比例
     */
    public float getHorizontalScale() {
        return mDisplayWidth / STANDARD_WIDTH;
    }

    /**
     * 获取竖直方向缩放比例
     */
    public float getVerticalScale() {
        return mDisplayHeight / STANDARD_HEIGHT;
    }


}
